|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.3 Перехват и обработка ошибок времени выполненияОтладка и обнаружение ошибок в программах VBA, ошибки времени выполнение (runtime errors), обработка ошибок времени выполнения, команда On Error GoTo, объект Err Самое тяжелые для разработчика ошибки - это ошибки времени выполнения, которые могут возникнуть по самым разным причинам: пользователь ввел недопустимое значение, файл с таким именем уже существует, сервер баз данных отказывается вставлять введенные пользователем данные, разорвано сетевое соединение и т.п. При возникновении ошибок времени выполнения обычно работа приложения аварийно завершается, а пользователю выдается встроенное сообщение, которое он вряд ли сможет расшифровать. Поэтому одна из самых трудоемких частей при создании программы на VBA - предусмотреть, какие ошибки могут возникнуть при работе пользователя и реализовать их обработку. Общий принцип обработки ошибки выглядит так:
Dim a As Integer, b As Integer, c As Integer On Error GoTo ErrorHandlerDivision c = a / b Далее в коде программы помещается метка обработчика ошибки и программный код обработки: ErrorHandlerDivision: MsgBox "Ошибка при делении" Поскольку в такой ситуации код обработчика ошибки будет выполняться даже в том случае, если ошибки не было, есть смысл поставить перед меткой обработчика команду Exit Sub (если это подпроцедура) или Exit Function (если это - функция). Полный код нашей мини-программы может выглядеть так: Private Sub UserForm_Click() Dim a As Integer, b As Integer, c As Integer On Error GoTo ErrorHandlerDivision c = a / b Exit Sub ErrorHandlerDivision: MsgBox "Ошибка при делении" End Sub Как правило, если есть возможность исправить ошибку - в обработчике ошибок ее исправляют (или предоставляют такую возможность пользователю), если нет - то выдают пользователю сообщение с объяснением и прекращают работу программы. После выполнения кода обработчика ошибки вам нужно будет сделать выбор - либо продолжить выполнение той процедуры, в которой возникла ошибка, либо прекратить ее выполнение и передать управление вызвавшей ее процедуре. В вашем распоряжении три варианта:
Resume метка Синтаксис работы с меткой - такой же, как в GoTo. Еще несколько моментов, которые связаны с обработкой ошибок:
On Error GoTo 0
Чуть подробнее о специальном объекте Err. У этого объекта - два главных свойства и два метода:
Надо сказать, что обработка ошибок - это очень надежный, но и очень ресурсоемкий метод работы. Если в вашей программе есть возможность обойтись без генерации и перехвата ошибок (например, проверить вводимое пользователем значение при помощи встроенных функций), то лучше так и делать. В то же время наличие обработчиков ошибок для того, чтобы справиться с действительно аварийными ситуациями - это большой плюс вашей программе (а зачастую и просто необходимость).
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить этот учебник в формате PDF (Acrobat Reader) или DOC (Microsoft Word) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||